/*
        给定参数n,从1到n会有n个整数:1,2,3,...,n,
        这n个数字共有n!种排列.
      按大小顺序升序列出所有排列的情况,并一一标记,
      当n=3时,所有排列如下:
      "123" "132" "213" "231" "312" "321"
      给定n和k,返回第k个排列.

      输入描述:
        输入两行，第一行为n，第二行为k，
        给定n的范围是[1,9],给定k的范围是[1,n!]。
      输出描述：
        输出排在第k位置的数字。

      实例1：
        输入:
          3
          3
        输出：
          213
        说明
          3的排列有123,132,213...,那么第三位置就是213

      实例2：
        输入
          2
          2
        输出：
          21
        说明
          2的排列有12,21，那么第二位置的为21
   */
const test = (input) => {
    let inputArr = input.split('\n')

    let [n, k] = inputArr
    console.log(n, k)

    // let _count = (n) => {
    //     if (n > 1) {
    //         return n * _count(n - 1)
    //     }
    //     return 1
    // }
    let stack = []
    Array.from({ length: n }, (t, i) => {
        stack.push(i + 1)
    })
    // 最小
    let min = parseInt(stack.join(""))
    let max = parseInt(stack.reverse().join(""))

    let seq = Array.from({ length: (max - min + 1) }, (t, i) => {

        let str = String(min + i)
        let reg = new RegExp(`^[1-${n}]{1,${n}}$`)
        if (reg.test(str)) {
            let double = Array.from({ length: n }, (t, i) => `${i + 1}\\d*?${i + 1}`).join("|")
            let reg2 = new RegExp(`(${double})`)
            // console.log(reg2)

            if (!reg2.test(str)) {
                return str
            }
        }
    }).filter(t => t)

    console.log(seq,seq.length)
    console.log(seq[k - 1])
}
test(`2
  2`)
test(`3
  3`)
  test(`4
  4`)

  test(`5
  5`)